package cn.uexpo.lhz.controller.admin;

import cn.uexpo.lhz.biz.ImportLogBiz;
import cn.uexpo.lhz.biz.StaffBiz;
import cn.uexpo.lhz.biz.StaffImportErrorBiz;
import cn.uexpo.lhz.common.oldBase.BaseController;
import cn.uexpo.lhz.common.oldUtils.StringDate;
import cn.uexpo.lhz.common.utils.BeanCopyUtils;
import cn.uexpo.lhz.common.utils.ImportExeclUtil;
import cn.uexpo.lhz.domain.*;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;
import java.io.*;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;


/**
 *test
 * 人员管理快速导出
 * @author: zyg
 */
@RestController
@RequestMapping("/cert/importStaffTest")
public class ImportStaffTestController extends BaseController<Staff> {

    @Autowired
    private StaffBiz staffBiz;
    @Autowired
    private StaffImportErrorBiz staffErrorBiz;
    @Autowired
    private ImportLogBiz importLogBiz;
    @Autowired
    private HttpSession session;

    public static int FILE_COUNT = 2;// 上传文件数量

    public int totalCount = 0 ;//总数量
    public int successCount = 0 ;//导入成功数量
    public int errorCount = 0 ;//导入失败数量

    /**
     * 导入人员信息,单个excel 文件
     *
     * @return @RequestParam("uploadFiles")
     * @throws Exception
     */
    @RequestMapping(value = "/importStaff1", method = { RequestMethod.GET, RequestMethod.POST })
    public String importStaff1(@RequestParam(name = "createBy") String createBy,
                               @RequestParam(name = "handFlag") String handFlag,
                               @RequestParam("files") MultipartFile[] uploadFiles) throws Exception {
        String FILE_SIZE = dictionaryUtil.getItemValueUsable("biz_staff_params", "staff_pic_size");//图片大小：单位M
        System.out.println(FILE_SIZE+"------");
        System.out.println(handFlag+"---handFlag---");
        long startTime = System.currentTimeMillis();   //获取开始时间
        String msg = "";
        MultipartFile excelFile = null;// excel文件
        boolean verifyFlag=false;//校验是否通过
        /******* 校验处理begin*********************/
        if (uploadFiles != null && uploadFiles.length == 1) {
            excelFile = uploadFiles[0];
            boolean excelFlag = checkExcel(excelFile);
            if(!excelFlag){
                msg = "请上传一个excel文件!";
            }else{
                if (handFlag.equals("0")) {//EXCEL文件处理
                    /******** 导入数据业务处理begin*********************/
                    String excelFileName = excelFile.getOriginalFilename();
                    InputStream inputStream = excelFile.getInputStream();
                    Workbook wb = WorkbookFactory.create(inputStream);
                    // 读取对象列表的信息
                    Staff record = new Staff();
                    // 第二行开始，到倒数第三行结束（总数减去两行）
                    List<Staff> records = ImportExeclUtil.readDateListT(wb, record, 2, 0);
//                    System.out.println(records + "\n\n" + records.size());
                    System.out.println(records.size());
                    if (records != null && records.size() > 0) {
                        totalCount = records.size();
                        List<Staff> list = new ArrayList<Staff>();
                        for (Staff staff : records) {
                            int resultcode=0;
                            String message="";
                            boolean isNull = allFieldIsNull(staff);
//                            log.info("-----isNull---------:"+isNull);
                            if(isNull){
                                totalCount--;
                                continue ;
                            }
                            if (StringUtils.isBlank(staff.getStaffName())){//如果姓名为空，跳过该记录
                                resultcode=101;
                                msg = "(姓名不允许为空)";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }
                            String recordFlag = "0";//记录判断
                            String namelenthFlag="0";//姓名长度
                            String untitled2Flag="0";//人员编号长度
                            String untitled6Flag="0";//进入场次次数限制
                            String untitled7Flag="0";//入场开始时间
                            String untitled8Flag="0";//入场结束时间

                            int no = 0;
                            Date currentTime=StringDate.getNow();
                            String keyword1 = staff.getUntitled2();// 人员编号
                            String keyword2 = staff.getStaffName();// 姓名
                            String inCountLimit = staff.getUntitled6();//进入场次次数限制，默认0  untitled6
                            String allowInTime = staff.getUntitled7();//允许入场开始时间 untitled7
                            String allowOutTime = staff.getUntitled8();//允许入场结束时间 untitled8

//                            namelenthFlag=verifyNamelenth(keyword2);
//                            untitled2Flag=verifyUntitled2(keyword1);
//                            untitled6Flag=verifyNumFMT(inCountLimit);
//                            untitled7Flag=verifyTimeFMT(allowInTime);
//                            untitled8Flag=verifyTimeFMT(allowOutTime);
//                            recordFlag = verifyRecord(staff);

                            //姓名长度判断
                            if (namelenthFlag.equals("1")) {
                                resultcode=101;
                                message="姓名长度不能超过200";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }
                            //人员编号长度判断
                            if (untitled2Flag.equals("1")) {
                                resultcode=101;
                                message="人员编号长度不能超过200";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }

                            //入进入场次次数限制  0和正整数 格式判断
                            if (untitled6Flag.equals("1")) {
                                resultcode=101;
                                message="进入场次次数限制格式不正确";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }else if (untitled6Flag.equals("2")) {
                                staff.setUntitled6("0");
                            }else {
                                staff.setUntitled6(inCountLimit);
                            }
                            //入场开始时间格式判断
                            if (untitled7Flag.equals("1")) {
                                resultcode=101;
                                message="入场开始时间不符合日期格式要求";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }else if (untitled7Flag.equals("2")) {
                                staff.setUntitled7(null);
                            }else{
//                                Date allowInTime1=StringDate.getDateTime1(allowInTime);
//                                allowInTime = StringDate.DateToString(allowInTime1);
                                staff.setUntitled7(allowInTime);
                            }

                            //入场结束时间格式判断
                            if (untitled8Flag.equals("1")) {
                                resultcode=101;
                                message="入场结束时间不符合日期格式要求";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }else if (untitled8Flag.equals("2")) {
                                staff.setUntitled8(null);
                            }else{
//                                Date allowOutTime1=StringDate.getDateTime1(allowOutTime);
//                                allowOutTime = StringDate.DateToString(allowOutTime1);
                                staff.setUntitled8(allowOutTime);
                            }

                            if (recordFlag.equals("1")) {//已存在，
                                resultcode=101;
                                message="违反 姓名,项目名,身份证唯一性约束";
                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                                continue;
                            }
//                            staff.setIntoAccount("批量导入");
                            staff.setIntoAccount(excelFileName+"(快速)");
                            staff.setIntoTime(currentTime);
                            staff.setStaffState("0");//状态（正常0或者停用1）
                            if (handFlag.equals("0")) {//不处理图片
                                if(null!=staff.getStaffCardid()&&!"".equals(staff.getStaffCardid())){
                                    staff.setStaffCardid(staff.getStaffCardid().replaceAll(" ","")); //身份证号去除空格
                                }
                                if(null!=staff.getIcCard()&&!"".equals(staff.getIcCard())){
                                    staff.setIcCard(staff.getIcCard().replaceAll(" ","")); //ic卡号去除空格
                                }
                                list.add(staff);
//                                no = staffBiz.insertSelective(staff);
//                                if (no==1) {
//                                    resultcode=200;
//                                    message="操作成功";
//                                }else {
//                                    resultcode=401;
//                                    message="记录插入失败";
//                                }
                            }
                            String logMsg="";
                            if (resultcode==200) {
                                logMsg=message;
                            }else {
                                logMsg="人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                            }

//                            insertImportLog(staff, resultcode, createBy, excelFileName, logMsg);//添加到导入日志
                        }


                        int no = 0;
                        int resultcode=0;
                        String message="";

                            no = staffBiz.insertBatch(list);
//                            System.out.println(no+"--------------------------no");
//                            if (no==1) {
//                                resultcode=200;
//                                message="操作成功";
//                            }else {
//                                resultcode=401;
//                                message="记录插入失败";
//                            }
                            successCount = totalCount - errorCount ;
//                            msg= "本次操作：共导入"+totalCount+"条数据，其中"+successCount+"条导入成功，"+errorCount+"条导入失败。";
                            msg= "本次操作：共导入"+totalCount+"条数据，其中"+no+"条导入成功，"+(totalCount-no)+"条导入失败。";
                            totalCount = 0;
                            successCount = 0;
                            errorCount = 0;

                        long endTime = System.currentTimeMillis(); //获取结束时间
                        long l = endTime - startTime;
                        System.out.println("导出共耗时>>>>>>>>" + l + "毫秒");
                    }
                    /******* 导入数据业务end *********************/
                }

            }
        }else{
            msg = "上传文件数量有误！";
        }
        return  msg;
    }


    /**
     * 导入人员信息test
     *
     * @return @RequestParam("uploadFiles")
     * @throws Exception
     */
//    @PreAuthorize("hasAuthority('biz:importStaff:handle')")
    @RequestMapping(value = "/importStaffTest", method = { RequestMethod.GET, RequestMethod.POST })
    public String importStaffTest() throws Exception {
        Map<String, Staff> map = new HashMap<String, Staff>();
        StaffExample example=new StaffExample();
        StaffExample.Criteria criteria= example.createCriteria();
        criteria.andProjectTypeEqualTo("CME");
        List<Staff>  staffList=staffBiz.selectByExample(example);
        for(Staff staff :staffList){
            map.put("staff",staff);
        }
        long startTime = System.currentTimeMillis();   //获取开始时间
        staffBiz.insertBatch(staffList);
        long endTime = System.currentTimeMillis(); //获取结束时间
        long l = endTime - startTime;
        System.out.println("导出共耗时>>>>>>>>" + l + "毫秒");
        return null;
    }

    /**
     * 导入人员信息test
     *
     * @return @RequestParam("uploadFiles")
     * @throws Exception
     */
    @RequestMapping(value = "/importStaff2", method = { RequestMethod.GET, RequestMethod.POST })
    public String importStaff2(@RequestParam(name = "createBy") String createBy,
                               @RequestParam(name = "handFlag") String handFlag,
                               @RequestParam("files") MultipartFile[] uploadFiles) throws Exception {
        String FILE_SIZE=dictionaryUtil.getItemValueUsable("biz_staff_params","staff_pic_size");//图片大小：单位M
        System.out.println(FILE_SIZE+"------");
        System.out.println(handFlag+"---handFlag---");
        String msg = "";
        long startTime = System.currentTimeMillis();   //获取开始时间
        MultipartFile excelFile = null;// excel文件
        MultipartFile zipFile = null;// zip文件
        boolean verifyFlag=false;//校验是否通过
        /******* 校验处理begin*********************/
        if (uploadFiles != null && uploadFiles.length > 0) {
            boolean size = checkListsize(uploadFiles);
            if (size) {
                boolean type = checkFilesType(uploadFiles);
                if (type) {
                    verifyFlag=true;//通过
                    MultipartFile multipartFile1 = uploadFiles[0];// 获取第一个文件
                    MultipartFile multipartFile2 = uploadFiles[1];// 获取第二个文件
                    boolean isExcel = checkExcel(multipartFile1);// 检查第一个文件是否为excel文件
                    // 获取excel文件和zip文件
                    if (isExcel) {
                        excelFile = multipartFile1;
                        zipFile = multipartFile2;
                    } else {
                        excelFile = multipartFile2;
                        zipFile = multipartFile1;
                    }
                } else {
                    msg = "上传文件必须是一个excel一个zip!";
                }
            } else {
                msg = "上传文件数量有误";
            }
        }
        /******* 校验处理begin *********************/

        if (!verifyFlag) {
            return msg;
        }
        List<File> files = new ArrayList<File>();// 接收zip文件中的所有图片
        //uploadFolderName：zip文件存储目录，解压后删除   unzipPath：解压缩后文件存放目录，业务处理后里面内容删除
        String uploadFolderName = "uploadFolder";//本机位置D:\EclpWork\certManage3\src\main\webapp\tempDirectory
        String unzipPath = "tempDirectory";//本机位置D:\EclpWork\certManage3\src\main\webapp\tempDirectory
        String curProjectPath = session.getServletContext().getRealPath("/");
        String saveDirectoryPath = curProjectPath + uploadFolderName;
        String unzipDirectoryPath = curProjectPath + unzipPath;

        if (handFlag.equals("1")) {//处理图片
            Map<String, Object> map = doPic(zipFile, files,uploadFolderName,unzipPath,saveDirectoryPath,unzipDirectoryPath);
            msg =(String)map.get("msg");
            files=(List<File>)map.get("files");
        }

        /******** 导入数据业务处理begin*********************/
        String excelFileName = excelFile.getOriginalFilename();
        InputStream inputStream = excelFile.getInputStream();
        Workbook wb = WorkbookFactory.create(inputStream);
        // 读取对象列表的信息
        Staff record = new Staff();
        // 第二行开始，到倒数第三行结束（总数减去两行）
        List<Staff> records = ImportExeclUtil.readDateListT(wb, record, 2, 0);
//        System.out.println(records + "\n\n" + records.size());
        System.out.println(records.size());
        if (records != null && records.size() > 0) {
            totalCount = records.size();
            List<Staff> list = new ArrayList<Staff>();
            for (Staff staff : records) {
                int resultcode=0;
                String message="";
                boolean isNull = allFieldIsNull(staff);
//              log.info("-----isNull---------:"+isNull);
                if(isNull){
                    totalCount--;
                    continue ;
                }
                if (StringUtils.isBlank(staff.getStaffName())){//如果姓名为空，跳过该记录
                    resultcode=101;
                    msg = "(姓名不允许为空)";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }
                String picFlag="0";//图片判断
                String recordFlag = "0";//记录判断
                String namelenthFlag="0";//姓名长度
                String untitled2Flag="0";//人员编号长度
                String untitled6Flag="0";//进入场次次数限制
                String untitled7Flag="0";//入场开始时间
                String untitled8Flag="0";//入场结束时间


                int no = 0;
                Date currentTime=StringDate.getNow();
                String keyword1 = staff.getUntitled2();// 人员编号
                String keyword2 = staff.getStaffName();// 姓名
                String inCountLimit = staff.getUntitled6();//进入场次次数限制，默认0  untitled6
                String allowInTime = staff.getUntitled7();//允许入场开始时间 untitled7
                String allowOutTime = staff.getUntitled8();//允许入场结束时间 untitled8

//                untitled6Flag=verifyNumFMT(inCountLimit);
//                untitled7Flag=verifyTimeFMT(allowInTime);
//                untitled8Flag=verifyTimeFMT(allowOutTime);
//                namelenthFlag=verifyNamelenth(keyword2);
//                untitled2Flag=verifyUntitled2(keyword1);
//                recordFlag = verifyRecord(staff);


                //姓名长度判断
                if (namelenthFlag.equals("1")) {
                    resultcode=101;
                    message="姓名长度不能超过200";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }
                //人员编号长度判断
                if (untitled2Flag.equals("1")) {
                    resultcode=101;
                    message="人员编号长度不能超过200";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }

                //入进入场次次数限制  0和正整数 格式判断
                if (untitled6Flag.equals("1")) {
                    resultcode=101;
                    message="进入场次次数限制格式不正确";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }else if (untitled6Flag.equals("2")) {
                    staff.setUntitled6("0");
                }else {
                    staff.setUntitled6(inCountLimit);
                }
                //入场开始时间格式判断
                if (untitled7Flag.equals("1")) {
                    resultcode=101;
                    message="入场开始时间不符合日期格式要求";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }else if (untitled7Flag.equals("2")) {
                    staff.setUntitled7(null);
                }else{
//                    Date allowInTime1=StringDate.getDateTime1(allowInTime);
//                    allowInTime = StringDate.DateToString(allowInTime1);
                    staff.setUntitled7(allowInTime);
                }
                //入场结束时间格式判断
                if (untitled8Flag.equals("1")) {
                    resultcode=101;
                    message="入场结束时间不符合日期格式要求";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }else if (untitled8Flag.equals("2")) {
                    staff.setUntitled8(null);
                }else{
//                    Date allowOutTime1=StringDate.getDateTime1(allowOutTime);
//                    allowOutTime = StringDate.DateToString(allowOutTime1);
                    staff.setUntitled8(allowOutTime);
                }

                if (recordFlag.equals("1")) {//已存在，
                    resultcode=101;
                    message="违反 姓名,项目名,身份证唯一性约束";
                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
                    continue;
                }

//                staff.setIntoAccount("批量导入");
//                staff.setIntoAccount(excelFileName);
                staff.setIntoAccount(excelFileName+"(快速)");
                staff.setIntoTime(currentTime);
                staff.setStaffState("0");//状态（正常0或者停用1）
                if (handFlag.equals("0")) {//不处理图片
//                    no = staffBiz.insertSelective(staff);
                    if(null!=staff.getStaffCardid()&&!"".equals(staff.getStaffCardid())){
                        staff.setStaffCardid(staff.getStaffCardid().replaceAll(" ","")); //身份证号去除空格
                    }
                    if(null!=staff.getIcCard()&&!"".equals(staff.getIcCard())){
                        staff.setIcCard(staff.getIcCard().replaceAll(" ","")); //ic卡号去除空格
                    }
                    list.add(staff);
                    if (no==1) {
                        resultcode=200;
                        message="操作成功";
                    }else {
                        resultcode=401;
                        message="记录插入失败";
                    }
                }else {//处理图片
                    picFlag=verifyPic(files, staff);
                    //图片判断
                    if (picFlag.equals("0")) {
                        resultcode=103;
                        message="图片不存在";
                    }else if (picFlag.equals("2")) {
                        resultcode=104;
                        message="图片大小不能超过"+FILE_SIZE+"M";
                    }else if (picFlag.equals("3")) {
                        resultcode=105;
                        message="opencv接口抠图时失败";
                    }else {
                        if(null!=staff.getStaffCardid()&&!"".equals(staff.getStaffCardid())){
                            staff.setStaffCardid(staff.getStaffCardid().replaceAll(" ","")); //身份证号去除空格
                        }
                        if(null!=staff.getIcCard()&&!"".equals(staff.getIcCard())){
                            staff.setIcCard(staff.getIcCard().replaceAll(" ","")); //ic卡号去除空格
                        }
                        list.add(staff);

//                        no = staffBiz.insertSelective(staff);
//                        if (no==1) {
//                            resultcode=200;
//                            message="操作成功";
//                        }else {
//                            resultcode=401;
//                            message="记录插入失败";
//                        }
                    }
                }
                String logMsg="";
                if (resultcode==200) {
                    logMsg=message;
                }else {
                    logMsg="人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
                }
//                insertImportLog(staff, resultcode, createBy, excelFileName, logMsg);//添加到导入日志
            }

            int no = 0;
            int resultcode=0;
            String message="";
            no = staffBiz.insertBatch(list);
//            if (no==1) {
//                resultcode=200;
//                message="操作成功";
//            }else {
//                resultcode=401;
//                message="记录插入失败";
//                errorCount = totalCount;
//            }

//            msg = "操作结束";
            successCount = totalCount - errorCount ;
            msg= "本次操作：共导入"+totalCount+"条数据，其中"+no+"条导入成功，"+(totalCount-no)+"条导入失败。";
            totalCount = 0;
            successCount = 0;
            errorCount = 0;
            if (handFlag.equals("1")) {//处理图片
                del(unzipDirectoryPath);//删除解压后的目录及下面所有文件
            }

            long endTime = System.currentTimeMillis(); //获取结束时间
            long l = endTime - startTime;
            System.out.println("导出共耗时>>>>>>>>" + l + "毫秒");
        }
        /******* 导入数据业务end *********************/
        return msg;
    }


//    /**
//     * 导入人员信息,单个excel 文件
//     *
//     * @return @RequestParam("uploadFiles")
//     * @throws Exception
//     */
//    @PreAuthorize("hasAuthority('biz:importStaff:handle')")
//    @RequestMapping(value = "/importStaff1", method = { RequestMethod.GET, RequestMethod.POST })
//    public String importStaff1(@RequestParam(name = "createBy") String createBy,
//                               @RequestParam(name = "handFlag") String handFlag,
//                               @RequestParam("files") MultipartFile[] uploadFiles) throws Exception {
//        String FILE_SIZE = dictionaryUtil.getItemValueUsable("biz_staff_params", "staff_pic_size");//图片大小：单位M
//        System.out.println(FILE_SIZE+"------");
//        System.out.println(handFlag+"---handFlag---");
//        String msg = "";
//        MultipartFile excelFile = null;// excel文件
//        boolean verifyFlag=false;//校验是否通过
//        /******* 校验处理begin*********************/
//        if (uploadFiles != null && uploadFiles.length == 1) {
//            excelFile = uploadFiles[0];
//            boolean excelFlag = checkExcel(excelFile);
//            if(!excelFlag){
//                msg = "请上传一个excel文件!";
//            }else{
//                if (handFlag.equals("0")) {//EXCEL文件处理
//                    /******** 导入数据业务处理begin*********************/
//                    String excelFileName = excelFile.getOriginalFilename();
//                    InputStream inputStream = excelFile.getInputStream();
//                    Workbook wb = WorkbookFactory.create(inputStream);
//                    // 读取对象列表的信息
//                    Staff record = new Staff();
//                    // 第二行开始，到倒数第三行结束（总数减去两行）
//                    List<Staff> records = ImportExeclUtil.readDateListT(wb, record, 2, 0);
//                    System.out.println(records + "\n\n" + records.size());
//                    if (records != null && records.size() > 0) {
//                        totalCount = records.size();
//                        for (Staff staff : records) {
//                            int resultcode=0;
//                            String message="";
//                            boolean isNull = allFieldIsNull(staff);
////                            log.info("-----isNull---------:"+isNull);
//                            if(isNull){
//                                totalCount--;
//                                continue ;
//                            }
//                            if (StringUtils.isBlank(staff.getStaffName())){//如果姓名为空，跳过该记录
//                                resultcode=101;
//                                msg = "(姓名不允许为空)";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }
//                            String recordFlag = "0";//记录判断
//                            String namelenthFlag="0";//姓名长度
//                            String untitled2Flag="0";//人员编号长度
//                            String untitled6Flag="0";//进入场次次数限制
//                            String untitled7Flag="0";//入场开始时间
//                            String untitled8Flag="0";//入场结束时间
//
//                            int no = 0;
//                            Date currentTime=StringDate.getNow();
//                            String keyword1 = staff.getUntitled2();// 人员编号
//                            String keyword2 = staff.getStaffName();// 姓名
//                            String inCountLimit = staff.getUntitled6();//进入场次次数限制，默认0  untitled6
//                            String allowInTime = staff.getUntitled7();//允许入场开始时间 untitled7
//                            String allowOutTime = staff.getUntitled8();//允许入场结束时间 untitled8
//
////                            namelenthFlag=verifyNamelenth(keyword2);
////                            untitled2Flag=verifyUntitled2(keyword1);
////                            untitled6Flag=verifyNumFMT(inCountLimit);
////                            untitled7Flag=verifyTimeFMT(allowInTime);
////                            untitled8Flag=verifyTimeFMT(allowOutTime);
////                            recordFlag = verifyRecord(staff);
//
//                            //姓名长度判断
//                            if (namelenthFlag.equals("1")) {
//                                resultcode=101;
//                                message="姓名长度不能超过200";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }
//                            //人员编号长度判断
//                            if (untitled2Flag.equals("1")) {
//                                resultcode=101;
//                                message="人员编号长度不能超过200";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }
//
//                            //入进入场次次数限制  0和正整数 格式判断
//                            if (untitled6Flag.equals("1")) {
//                                resultcode=101;
//                                message="进入场次次数限制格式不正确";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }else if (untitled6Flag.equals("2")) {
//                                staff.setUntitled6("0");
//                            }else {
//                                staff.setUntitled6(inCountLimit);
//                            }
//                            //入场开始时间格式判断
//                            if (untitled7Flag.equals("1")) {
//                                resultcode=101;
//                                message="入场开始时间不符合日期格式要求";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }else if (untitled7Flag.equals("2")) {
//                                staff.setUntitled7(null);
//                            }else{
////                                Date allowInTime1=StringDate.getDateTime1(allowInTime);
////                                allowInTime = StringDate.DateToString(allowInTime1);
//                                staff.setUntitled7(allowInTime);
//                            }
//
//                            //入场结束时间格式判断
//                            if (untitled8Flag.equals("1")) {
//                                resultcode=101;
//                                message="入场结束时间不符合日期格式要求";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }else if (untitled8Flag.equals("2")) {
//                                staff.setUntitled8(null);
//                            }else{
////                                Date allowOutTime1=StringDate.getDateTime1(allowOutTime);
////                                allowOutTime = StringDate.DateToString(allowOutTime1);
//                                staff.setUntitled8(allowOutTime);
//                            }
//
//
//                            if (recordFlag.equals("1")) {//已存在，
//                                resultcode=101;
//                                message="违反 姓名,项目名,身份证唯一性约束";
//                                msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                                insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                                continue;
//                            }
//                            staff.setIntoAccount("批量导入");
//                            staff.setIntoTime(currentTime);
//                            if (handFlag.equals("0")) {//不处理图片
//                                no = staffBiz.insertSelective(staff);
//                                if (no==1) {
//                                    resultcode=200;
//                                    message="操作成功";
//                                }else {
//                                    resultcode=401;
//                                    message="记录插入失败";
//                                }
//                            }
//                            String logMsg="";
//                            if (resultcode==200) {
//                                logMsg=message;
//                            }else {
//                                logMsg="人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                            }
//
//                            insertImportLog(staff, resultcode, createBy, excelFileName, logMsg);//添加到导入日志
//                        }
//
//                        successCount = totalCount - errorCount ;
//                        msg= "本次操作：共导入"+totalCount+"条数据，其中"+successCount+"条导入成功，"+errorCount+"条导入失败。";
//                        totalCount = 0;
//                        successCount = 0;
//                        errorCount = 0;
//
//                    }
//                    /******* 导入数据业务end *********************/
//                }
//
//            }
//        }else{
//            msg = "上传文件数量有误！";
//        }
//        return  msg;
//    }

//    /**
//     * 导入人员信息
//     *
//     * @return @RequestParam("uploadFiles")
//     * @throws Exception
//     */
//    @PreAuthorize("hasAuthority('biz:importStaff:handle')")
//    @RequestMapping(value = "/importStaff2", method = { RequestMethod.GET, RequestMethod.POST })
//    public String importStaff2(@RequestParam(name = "createBy") String createBy,
//                              @RequestParam(name = "handFlag") String handFlag,
//                              @RequestParam("files") MultipartFile[] uploadFiles) throws Exception {
//        String FILE_SIZE=dictionaryUtil.getItemValueUsable("biz_staff_params","staff_pic_size");//图片大小：单位M
//        System.out.println(FILE_SIZE+"------");
//        System.out.println(handFlag+"---handFlag---");
//        String msg = "";
//        MultipartFile excelFile = null;// excel文件
//        MultipartFile zipFile = null;// zip文件
//        boolean verifyFlag=false;//校验是否通过
//        /******* 校验处理begin*********************/
//        if (uploadFiles != null && uploadFiles.length > 0) {
//            boolean size = checkListsize(uploadFiles);
//            if (size) {
//                boolean type = checkFilesType(uploadFiles);
//                if (type) {
//                    verifyFlag=true;//通过
//                    MultipartFile multipartFile1 = uploadFiles[0];// 获取第一个文件
//                    MultipartFile multipartFile2 = uploadFiles[1];// 获取第二个文件
//                    boolean isExcel = checkExcel(multipartFile1);// 检查第一个文件是否为excel文件
//                    // 获取excel文件和zip文件
//                    if (isExcel) {
//                        excelFile = multipartFile1;
//                        zipFile = multipartFile2;
//                    } else {
//                        excelFile = multipartFile2;
//                        zipFile = multipartFile1;
//                    }
//                } else {
//                    msg = "上传文件必须是一个excel一个zip!";
//                }
//            } else {
//                msg = "上传文件数量有误";
//            }
//        }
//        /******* 校验处理begin *********************/
//
//        if (!verifyFlag) {
//            return msg;
//        }
//        List<File> files = new ArrayList<File>();// 接收zip文件中的所有图片
//        //uploadFolderName：zip文件存储目录，解压后删除   unzipPath：解压缩后文件存放目录，业务处理后里面内容删除
//        String uploadFolderName = "uploadFolder";//本机位置D:\EclpWork\certManage3\src\main\webapp\tempDirectory
//        String unzipPath = "tempDirectory";//本机位置D:\EclpWork\certManage3\src\main\webapp\tempDirectory
//        String curProjectPath = session.getServletContext().getRealPath("/");
//        String saveDirectoryPath = curProjectPath + uploadFolderName;
//        String unzipDirectoryPath = curProjectPath + unzipPath;
//
//        if (handFlag.equals("1")) {//处理图片
//            Map<String, Object> map = doPic(zipFile, files,uploadFolderName,unzipPath,saveDirectoryPath,unzipDirectoryPath);
//            msg =(String)map.get("msg");
//            files=(List<File>)map.get("files");
//        }
//
//        /******** 导入数据业务处理begin*********************/
//        String excelFileName = excelFile.getOriginalFilename();
//        InputStream inputStream = excelFile.getInputStream();
//        Workbook wb = WorkbookFactory.create(inputStream);
//        // 读取对象列表的信息
//        Staff record = new Staff();
//        // 第二行开始，到倒数第三行结束（总数减去两行）
//        List<Staff> records = ImportExeclUtil.readDateListT(wb, record, 2, 0);
//        System.out.println(records + "\n\n" + records.size());
//        if (records != null && records.size() > 0) {
//            totalCount = records.size();
//            for (Staff staff : records) {
//                int resultcode=0;
//                String message="";
//                boolean isNull = allFieldIsNull(staff);
////              log.info("-----isNull---------:"+isNull);
//                if(isNull){
//                    totalCount--;
//                    continue ;
//                }
//                if (StringUtils.isBlank(staff.getStaffName())){//如果姓名为空，跳过该记录
//                    resultcode=101;
//                    msg = "(姓名不允许为空)";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }
//                String picFlag="0";//图片判断
//                String recordFlag = "0";//记录判断
//                String namelenthFlag="0";//姓名长度
//                String untitled2Flag="0";//人员编号长度
//                String untitled6Flag="0";//进入场次次数限制
//                String untitled7Flag="0";//入场开始时间
//                String untitled8Flag="0";//入场结束时间
//
//
//                int no = 0;
//                Date currentTime=StringDate.getNow();
//                String keyword1 = staff.getUntitled2();// 人员编号
//                String keyword2 = staff.getStaffName();// 姓名
//                String inCountLimit = staff.getUntitled6();//进入场次次数限制，默认0  untitled6
//                String allowInTime = staff.getUntitled7();//允许入场开始时间 untitled7
//                String allowOutTime = staff.getUntitled8();//允许入场结束时间 untitled8
//
////                untitled6Flag=verifyNumFMT(inCountLimit);
////                untitled7Flag=verifyTimeFMT(allowInTime);
////                untitled8Flag=verifyTimeFMT(allowOutTime);
////                namelenthFlag=verifyNamelenth(keyword2);
////                untitled2Flag=verifyUntitled2(keyword1);
////                recordFlag = verifyRecord(staff);
//
//
//                //姓名长度判断
//                if (namelenthFlag.equals("1")) {
//                    resultcode=101;
//                    message="姓名长度不能超过200";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }
//                //人员编号长度判断
//                if (untitled2Flag.equals("1")) {
//                    resultcode=101;
//                    message="人员编号长度不能超过200";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }
//
//                //入进入场次次数限制  0和正整数 格式判断
//                if (untitled6Flag.equals("1")) {
//                    resultcode=101;
//                    message="进入场次次数限制格式不正确";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }else if (untitled6Flag.equals("2")) {
//                    staff.setUntitled6("0");
//                }else {
//                    staff.setUntitled6(inCountLimit);
//                }
//                //入场开始时间格式判断
//                if (untitled7Flag.equals("1")) {
//                    resultcode=101;
//                    message="入场开始时间不符合日期格式要求";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }else if (untitled7Flag.equals("2")) {
//                    staff.setUntitled7(null);
//                }else{
////                    Date allowInTime1=StringDate.getDateTime1(allowInTime);
////                    allowInTime = StringDate.DateToString(allowInTime1);
//                    staff.setUntitled7(allowInTime);
//                }
//                //入场结束时间格式判断
//                if (untitled8Flag.equals("1")) {
//                    resultcode=101;
//                    message="入场结束时间不符合日期格式要求";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }else if (untitled8Flag.equals("2")) {
//                    staff.setUntitled8(null);
//                }else{
////                    Date allowOutTime1=StringDate.getDateTime1(allowOutTime);
////                    allowOutTime = StringDate.DateToString(allowOutTime1);
//                    staff.setUntitled8(allowOutTime);
//                }
//
//                if (recordFlag.equals("1")) {//已存在，
//                    resultcode=101;
//                    message="违反 姓名,项目名,身份证唯一性约束";
//                    msg = "人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                    insertImportLog(staff, resultcode, createBy, excelFileName, msg);//添加到导入日志
//                    continue;
//                }
//                staff.setIntoAccount("批量导入");
//                staff.setIntoTime(currentTime);
//                staff.setStaffState("0");//状态（正常0或者停用1）
//                if (handFlag.equals("0")) {//不处理图片
//                    no = staffBiz.insertSelective(staff);
//                    if (no==1) {
//                        resultcode=200;
//                        message="操作成功";
//                    }else {
//                        resultcode=401;
//                        message="记录插入失败";
//                    }
//                }else {//处理图片
//                    picFlag=verifyPic(files, staff);
//                    //图片判断
//                    if (picFlag.equals("0")) {
//                        resultcode=103;
//                        message="图片不存在";
//                    }else if (picFlag.equals("2")) {
//                        resultcode=104;
//                        message="图片大小不能超过"+FILE_SIZE+"M";
//                    }else if (picFlag.equals("3")) {
//                        resultcode=105;
//                        message="opencv接口抠图时失败";
//                    }else {
//                        no = staffBiz.insertSelective(staff);
//                        if (no==1) {
//                            resultcode=200;
//                            message="操作成功";
//                        }else {
//                            resultcode=401;
//                            message="记录插入失败";
//                        }
//                    }
//                }
//                String logMsg="";
//                if (resultcode==200) {
//                    logMsg=message;
//                }else {
//                    logMsg="人员编号[" + keyword1 + "],姓名[" + keyword2 + "].提示("+message+")";//详情
//                }
//
//                insertImportLog(staff, resultcode, createBy, excelFileName, logMsg);//添加到导入日志
//            }
////            msg = "操作结束";
//            successCount = totalCount - errorCount ;
//            msg= "本次操作：共导入"+totalCount+"条数据，其中"+successCount+"条导入成功，"+errorCount+"条导入失败。";
//            totalCount = 0;
//            successCount = 0;
//            errorCount = 0;
//            if (handFlag.equals("1")) {//处理图片
//                del(unzipDirectoryPath);//删除解压后的目录及下面所有文件
//            }
//        }
//        /******* 导入数据业务end *********************/
//        return msg;
//    }
    private Map doPic(MultipartFile zipFile,List<File> files,String uploadFolderName,String unzipPath,String saveDirectoryPath,String unzipDirectoryPath) throws IllegalStateException, IOException {

        Map<String, Object> map=new HashMap<String, Object>();
        String msg = "";
        /******* 解压处理begin*********************/

        System.out.println("上传保存目录：" + saveDirectoryPath);
        System.out.println("上传解压主题目录：" + unzipDirectoryPath);
        File saveDirectory = new File(saveDirectoryPath);
        if (!saveDirectory.isDirectory()) {
            saveDirectory.mkdir();
        }
        File unzipPathDirectory = new File(unzipDirectoryPath);
        if (!unzipPathDirectory.isDirectory()) {
            unzipPathDirectory.mkdir();
        }
        System.out.println("Project real path [" + saveDirectory.getAbsolutePath() + "]");
        // 判断文件是否存在
        if (!zipFile.isEmpty()) {
            String fileName = zipFile.getOriginalFilename();
            File newUploadFile = new File(saveDirectory, fileName);
            zipFile.transferTo(newUploadFile);
            // 解压缩
            try {
                files = zipToFile(saveDirectoryPath + File.separator + fileName, unzipDirectoryPath);
            } catch (Exception e) {
                del(saveDirectoryPath);//删除原上传文件
                msg = "zip文件解压失败,压缩时请选择zip格式压缩!";
                map.put("msg", msg);
                return map;
            } finally {
                del(saveDirectoryPath);//删除原上传文件
            }
        }
        map.put("msg", msg);
        map.put("files", files);
        return map;
        /*******解压处理end********************/
    }

    //姓名长度
    private String verifyNamelenth(String name) {
        String result = "0";
        if (StringUtils.isNotBlank(name)) {
            if (name.length()>=200) {
                result = "1";//长度越界
            }
        }
        return result;
    }
    //人员编号长度
    private String verifyUntitled2(String untitled2) {
        String result = "0";
        if (StringUtils.isNotBlank(untitled2)) {
            if (untitled2.length()>=200) {
                result = "1";//长度越界
            }
        }
        return result;
    }

    //是否为非负整数格式
    private String verifyNumFMT(String pramStr) {
        String result = "0";
        if (StringUtils.isNotBlank(pramStr)) {
            String pattern = "^\\d+$";
            boolean isMatch = Pattern.matches(pattern, pramStr);
            if(!isMatch){
                result = "1";//不匹配
            }else{
                result = "0";//匹配
            }
        }else{
            result = "2";//为空
        }
        return result;
    }
    //是否为日期格式
    private String verifyTimeFMT(String timeStr) {
        String result = "0";//符合要求
        Date time = null;
        if (StringUtils.isNotBlank(timeStr)) {
            try{
                time = StringDate.getDateTime1(timeStr);
                if(time==null){
                    result = "1";//不符合要求
                }
            }catch (Exception e){
                result = "1";//不符合要求
            }

        }else{
            result = "2";
        }
        return result;
    }
    //图片
    private String verifyPic(List<File> files,Staff staff) throws IOException {
        String FILE_SIZE=dictionaryUtil.getItemValueUsable("biz_staff_params","staff_pic_size");//图片大小：单位M
        String result = "0";//默认找不到图片
//        String recordPicname = staff.getStaffName() + "_" + staff.getStaffTel();//从excel文件中设置图片名字
        String recordPicname = staff.getUntitled2();//人员编号作为图片名称
        for (File picFile : files) {
            String picfileName = picFile.getName();
            String picfileName1 = picfileName.substring(0, picfileName.indexOf("."));//获取图片名字，不带后缀
            if (recordPicname.equals(picfileName1)) {
                staff.setUntitled3(picfileName);//图片名称
                long size=picFile.length();
                if (size>Long.parseLong(FILE_SIZE)*1024*1024) {
                    result = "2";//图片超过4M不符合要求
                    break;
                }else {
//                    String res ="";
//                    try {
//                        FileInputStream input = new FileInputStream(picFile);
//                        byte[] buf = new byte[1024*1024*10]; //数据中转站 临时缓冲区
//                        int length = 0;
//                        //循环读取文件内容，输入流中将最多buf.length个字节的数据读入一个buf数组中,返回类型是读取到的字节数。
//                        //当文件读取到结尾时返回 -1,循环结束。
//                        while((length = input.read(buf)) != -1){
//                            String ss=new String(buf, 0, length);
////                            System.out.println(ss+"-----------");
//                        }
//                        MultipartFile multipartFile =  new MockMultipartFile("file", picFile.getName(), "text/plain", buf);
//                        //请求图片上传结果
//                        String key = "b1e899132c9bf7032b/*b86d6f9bc240e4";
//                        String url1 = "http://sf.uexpo.cn:8080/tool/face6";
//                        String cardType = "2";
//                        Map<String,String> param = new HashMap<>();
//                        param.put("key", key);
//                        param.put("cardType", cardType);
//                        res = HttpClientUtils.uploadFile(url1, multipartFile, "repayFile", null, null);
//                    } catch (FileNotFoundException e1) {
//                        // TODO Auto-generated catch block
//                        e1.printStackTrace();
//                    }
//                    if (StringUtils.isNotBlank(res)&&res.length()>0) {
//                        byte[] readAllBytes = Files.readAllBytes(picFile.toPath());//获取文件的字节数组
//                        staff.setStaffOriginalImage(readAllBytes);
//
//                        staff.setStaffHeadImage(Base64.decodeBase64(res));//抠图内容
//                        result = "1";//找到图片
//                        break;
//                    }else{
//                        result = "3";//调用opencv接口 抠图失败
//                        break;
//                    }

                    byte[] readAllBytes = Files.readAllBytes(picFile.toPath());//获取文件的字节数组
                    staff.setStaffOriginalImage(readAllBytes);
                    result = "1";//找到图片
                    break;
                }
            }
        }

        return result;
    }
    //是否有记录
    @SuppressWarnings("rawtypes")
    private String verifyRecord(Staff staff) {
        String result = "0";//默认无记录
        StaffExample example = new StaffExample();
        StaffExample.Criteria citeria = example.createCriteria();
        List staffs = null;
        if (StringUtils.isNotBlank(staff.getStaffName())
                && StringUtils.isNotBlank(staff.getProjectType())
                && StringUtils.isNotBlank(staff.getStaffCardid())) {
            citeria.andStaffNameEqualTo(staff.getStaffName()).andProjectTypeEqualTo(staff.getProjectType()).andStaffCardidEqualTo(staff.getStaffCardid());
            staffs = staffBiz.selectByExample(example);
        }
        if (staffs != null && staffs.size() > 0) {
            result = "1";//有记录
        }
        return result;
    }


    private void insertImportLog(Staff staff, int resultcode, String createBy, String fileName, String msg) {

        int staffId = 0 ;

        // 异常情况,插入到t_user_staff_import_error,供后续纠错功能使用
        if(resultcode !=200){
            errorCount ++ ; //失败次数加1
            StaffImportError staffImportError = new StaffImportError();
            int begin = msg.indexOf('(');
            int end = msg.indexOf(')');
            String errorMsg=msg.substring(begin+1,end);
            try {
                BeanCopyUtils.Copy(staff,staffImportError);

                staffImportError.setUntitled11(resultcode+"");//返回码
                staffImportError.setUntitled12(createBy);//导入者
                staffImportError.setUntitled13("0");//纠错次数,第一次设置为0
                staffImportError.setUntitled14(fileName);//文件名
                staffImportError.setUntitled15(errorMsg);//失败提醒信息
                staffErrorBiz.insertSelective(staffImportError);

                StaffImportErrorExample example=new StaffImportErrorExample();
                StaffImportErrorExample.Criteria citeria=example.createCriteria();
                citeria.andUntitled2EqualTo(staff.getUntitled2());

                List<StaffImportError> list = staffErrorBiz.selectByExample(example);
                if(list!=null&&list.size()>0){
                    StaffImportError newError = list.get(0);
                    staffId = newError.getStaffId();
                }
                log.info(staffId+"--------error");
            } catch (Exception e) {
                e.printStackTrace();
            }

            ImportLog log = new ImportLog();
            Date now = StringDate.getNow();
            String keyword1 = staff.getUntitled2();// 人员编号
            String keyword2 = staff.getStaffName();// 姓名
            String keyword3 = staff.getStaffTel();// 手机号
            String keyword4 = staff.getProjectType();// 所属项目
            log.setCode(resultcode);
            log.setMsg(msg);
            log.setFilename(fileName);
            log.setKeyword1(keyword1);
            log.setKeyword2(keyword2);
            log.setKeyword3(keyword3);
            log.setKeyword4(keyword4);
            log.setCreateBy(createBy);
            log.setCreateTime(now);
            log.setExtstr1(staffId+"");//外键
            importLogBiz.insertSelective(log);
        }
//        else{
//
//            StaffExample example=new StaffExample();
//            StaffExample.Criteria citeria=example.createCriteria();
//            citeria.andUntitled2EqualTo(staff.getUntitled2());
//
//            List<Staff> list = staffBiz.selectByExample(example);
//            if(list!=null&&list.size()>0){
//                Staff record = list.get(0);
//                staffId = record.getStaffId();
//            }
//            log.info(staffId+"--------success");
//        }

//        ImportLog log = new ImportLog();
//        Date now = StringDate.getNow();
//        String keyword1 = staff.getUntitled2();// 人员编号
//        String keyword2 = staff.getStaffName();// 姓名
//        String keyword3 = staff.getStaffTel();// 手机号
//        String keyword4 = staff.getProjectType();// 所属项目
//        log.setCode(resultcode);
//        log.setMsg(msg);
//        log.setFilename(fileName);
//        log.setKeyword1(keyword1);
//        log.setKeyword2(keyword2);
//        log.setKeyword3(keyword3);
//        log.setKeyword4(keyword4);
//        log.setCreateBy(createBy);
//        log.setCreateTime(now);
//        log.setExtstr1(staffId+"");//外键
//        importLogBiz.insertSelective(log);

    }



    /**
     *
     * @Title: checkExcel
     * @Description: TODO(excel文件校验)
     * @param: @param file
     * @param: @return
     * @param: @throws Exception
     * @return: boolean
     * @throws
     */
    private static boolean checkExcel(MultipartFile file) throws Exception {
        // 判断文件是否存在
        if (null == file) {
            return false;// 文件不存在
        }
        // 获得文件名
        String fileName = file.getOriginalFilename();
        if (fileName.endsWith("xls") || fileName.endsWith("xlsx")) {
            return true;// excel文件
        } else {
            return false;// 不符合要求文件
        }
    }

    /**
     *
     * @Title: checkZip
     * @Description: TODO(zip文件校验)
     * @param: @param file
     * @param: @return
     * @param: @throws Exception
     * @return: boolean
     * @throws
     */
    private static boolean checkZip(MultipartFile file) throws Exception {
        // 判断文件是否存在
        if (null == file) {
            return false;// 文件不存在
        }
        // 获得文件名
        String fileName = file.getOriginalFilename();
        if (fileName.endsWith("zip")) {
            return true;// excel文件
        } else {
            return false;// 不符合要求文件
        }

    }

    /**
     * @Title: checkListsize
     * @Description: TODO(数量校验：2个)
     * @param: @param files
     * @param: @return
     * @param: @throws Exception
     * @return: boolean
     * @throws
     */
    private static boolean checkListsize(MultipartFile[] files) throws Exception {
        if (files != null && files.length == FILE_COUNT) {
            return true;//
        } else {
            return false;// 文件个数有误
        }
    }

    /**
     * @Title: checkFilesType
     * @Description: TODO(文件类型校验)
     * @param: @param files
     * @param: @return
     * @param: @throws Exception
     * @return: boolean
     * @throws
     */
    private static boolean checkFilesType(MultipartFile[] files) throws Exception {
        MultipartFile multipartFile1 = files[0];
        MultipartFile multipartFile2 = files[1];
        boolean oneExceloneZip = (checkExcel(multipartFile1) && checkZip(multipartFile2))
                || (checkExcel(multipartFile2) && checkZip(multipartFile1));
        if (oneExceloneZip) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * 解压zip文件
     *
     * @param sourceFile,待解压的zip文件;
     *            toFolder,解压后的存放路径
     * @throws Exception
     **/

    private static List<File> zipToFile(String sourceFile, String toFolder) throws Exception {
        String toDisk = toFolder;// 接收解压后的存放路径
        ZipFile zfile = new ZipFile(sourceFile, Charset.forName("GBK"));// 连接待解压文件
        List<File> files = new ArrayList<File>();// 用于接收zip里面所有文件
        Enumeration<? extends ZipEntry> zList = zfile.entries();// 得到zip包里的所有元素
        ZipEntry ze = null;
        byte[] buf = new byte[1024];
        while (zList.hasMoreElements()) {
            ze = (ZipEntry) zList.nextElement();
            if (ze.isDirectory()) {
                System.out.println("打开zip文件里的文件夹:" + ze.getName() + "skipped...");
                continue;
            }
            OutputStream outputStream = null;
            InputStream inputStream = null;
            try {
                // 以ZipEntry为参数得到一个InputStream，并写到OutputStream中
                File newFile = getRealFileName(toDisk, ze.getName());
                files.add(newFile);
                outputStream = new BufferedOutputStream(new FileOutputStream(newFile));
                inputStream = new BufferedInputStream(zfile.getInputStream(ze));
                int readLen = 0;
                while ((readLen = inputStream.read(buf, 0, 1024)) != -1) {
                    outputStream.write(buf, 0, readLen);
                }
                inputStream.close();
                outputStream.close();
            } catch (Exception e) {
                System.out.println("解压失败：" + e.toString());
                throw new IOException("解压失败：" + e.toString());
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {

                    }
                }
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
                inputStream = null;
                outputStream = null;
            }

        }
        zfile.close();
        return files;
    }

    /**
     * 给定根目录，返回一个相对路径所对应的实际文件名.
     *
     * @param zippath
     *            指定根目录
     * @param absFileName
     *            相对路径名，来自于ZipEntry中的name
     * @return java.io.File 实际的文件
     */
    private static File getRealFileName(String zippath, String absFileName) {
//        System.out.println("文件名：" + absFileName);
        String[] dirs = absFileName.split("/", absFileName.length());
        File ret = new File(zippath);// 创建文件对象
        if (dirs.length > 1) {
            for (int i = 0; i < dirs.length - 1; i++) {
                ret = new File(ret, dirs[i]);
            }
        }
        if (!ret.exists()) {// 检测文件是否存在
            ret.mkdirs();// 创建此抽象路径名指定的目录
        }
        ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child 路径名字符串创建一个新 File 实例
        return ret;
    }

    /**
     *
     * @Title: del
     * @Description: TODO(删除指定目录下所有文件)
     * @param: @param filepath
     * @param: @throws IOException
     * @return: void
     * @throws
     */

    public void del(String filepath) throws IOException{
        File f = new File(filepath);//定义文件路径
        if(f.exists() && f.isDirectory()){//判断是文件还是目录
            if(f.listFiles().length==0){//若目录下没有文件则直接删除
                f.delete();
            }else{//若有则把文件放进数组，并判断是否有下级目录
                File delFile[]=f.listFiles();
                int i =f.listFiles().length;
                for(int j=0;j<i;j++){
                    if(delFile[j].isDirectory()){
                        del(delFile[j].getAbsolutePath());//递归调用del方法并取得子目录路径
                    }
                    delFile[j].delete();//删除文件
                }
            }
        }
    }


    //java 判断一个对象的所有属性,是否都为空,若都为空返回true,否则返回false
    public  static boolean allFieldIsNull(Object obj) throws IllegalAccessException {
        boolean flag = true;
        for(Field f : obj.getClass().getDeclaredFields()){
            f.setAccessible(true);
//            System.out.print(f.getName()+"------------");
//            if(f.get(obj) == null || f.get(obj).equals("")){
//                flag = true;
//                return flag;
//            }
            if(!(f.get(obj) == null || f.get(obj).equals(""))){
                flag = false;
               break;
            }
        }
        return flag;

    }

}
